package controllers;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import models.Disciplina;
import models.Aula;
import models.Turma;
import models.TurmaAula;
import models.Erro;
import dao.FachadaDAO;
import play.data.validation.Required;
import play.mvc.Controller;
import utils.exceptions.BDException;

public class Turma {
	public static void turma() {
    	render("Turma/Turma.html");
    }
	
	public static void cadastrarTurma () {
    	render("Turma/cadastrarTurma.html");
    }
	
	public static void removerTurma () {
    	render("Turma/removerTurma.html");
    }
	
	public static void alterarTurma () {
    	render("Turma/editarTurma.html");
    }
	
	public static void listarTurma () {
    	List<Turma> turmas = new ArrayList<Turma>();
		try {
			turmas = FachadaDAO.getInstance().listarTurmas();
			render("Turma/listarTurma.html",turmas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
	
	public static void editarTurma(String codigo) {
		Turma turma;
		try {
			turma = FachadaDAO.getInstance().buscarTurma(codigo);
			render("Turma/editarTurma.html",turma);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
	
	public static void actionCadastrar(@Required String codigo, @Required String dataInicio, @Required String dataFim){
		
		if(validation.hasErrors()) {
			render("Turma/cadastrarTurma.html");
		}
		
		Turma turma = new Turma();
		turma.setCodigo(params.get("codigo"));
		turma.setDataInicio(Date.valueOf(params.get("dataInicio")));
		turma.setDataFim(Date.valueOf(params.get("dataFim")));
		
		try {
			FachadaDAO.getInstance().cadastrarTurma(turma);
			render("Turma/cadastroTurmaRealizado.html");
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
		
	}
	public static void cadastrarTurmaAula(){
		List<Aula> aulas = new ArrayList<Aula>();
		List<Turma> turmas = new ArrayList<Turma>();
		List<Disciplina> disciplinas = new ArrayList<Disciplina>();
		try {
			aulas = FachadaDAO.getInstance().listarAulas();
			turmas = FachadaDAO.getInstance().listarTurmas();
			disciplinas = FachadaDAO.getInstance().listarDisciplinas();
			render("Turma/cadastrarTurmaAula.html", turmas, aulas, disciplinas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionCadastrarTurmaAula(@Required String idAula, @Required String idTurma, @Required String codDisc){
		
		if(validation.hasErrors()) {
			cadastrarTurmaAula();
		}
		
		TurmaAula turmaAula = new TurmaAula();
		turmaAula.setIdAula(Long.valueOf(params.get("idAula")));
		turmaAula.setIdTurma(Long.valueOf(params.get("idTurma")));
		turmaAula.setCodDisc(params.get("codDisc"));
		
		try {
			FachadaDAO.getInstance().cadastrarTurmaAula(turmaAula);
			render("Turma/cadastrarTurmaAula.html");
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
		
	}
	
	
	public static void actionEditar(@Required String codigo, @Required String dataInicio, @Required String dataFim){
		
		if(validation.hasErrors()) {
			render("Turma/editarTurma.html");
		}
		
		Turma turma;
		
		try {
			turma = FachadaDAO.getInstance().buscarTurma(codigo);
			
			turma.setCodigo(params.get("codigo"));
			turma.setDataInicio(Date.valueOf(params.get("dataInicio")));
			turma.setDataFim(Date.valueOf(params.get("dataFim")));
			
			FachadaDAO.getInstance().editarTurma(turma);
			listarTurma();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
		
	}
	
	public static void actionRemover(String codigo) {
		try {
			FachadaDAO.getInstance().excluirTurma(codigo);
			listarTurma();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarAlterar(String codigo) {
		try {
			Turma turma = FachadaDAO.getInstance().buscarTurma(codigo);
			render("Turma/editarTurma.html",turma);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarRemover(String codigo) {
		try {
			Turma turma = FachadaDAO.getInstance().buscarTurma(codigo);
			render("Turma/removerTurma.html",turma);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
}
